/*
 *                   江城子 . 程序员之歌
 *
 *               十年生死两茫茫，写程序，到天亮。
 *                   千行代码，Bug何处藏。
 *               纵使上线又怎样，朝令改，夕断肠。
 *
 *               领导每天新想法，天天改，日日忙。
 *                   相顾无言，惟有泪千行。
 *               每晚灯火阑珊处，夜难寐，加班狂。
 *
 */

/*
 * @Author: fengshan0525 2735332396@qq.com
 * @Date: 2023-03-19 09:38:33
 * @LastEditors: fengshan@0525 3183359488@qq.com
 * @LastEditTime: 2023-05-25 16:18:26
 * @FilePath: \nest-template\libs\db\src\models\role.model.ts
 * @Description: 角色模型
 */

import { ApiProperty } from '@nestjs/swagger';
import { modelOptions, prop } from '@typegoose/typegoose';
import { RoleFields } from 'types/modelFields';
import {
  IsNotEmpty,
  IsOptional,
  IsString,
  IsInt,
  Allow,
} from 'class-validator';

@modelOptions({
  // 自动为每个属性添加时间戳
  schemaOptions: {
    timestamps: true,
  },
})
export class AmdinRole implements RoleFields {
  @ApiProperty({ description: '角色名称', required: true })
  @IsNotEmpty({ message: '角色名称不能为空' })
  @prop()
  roleName: string;

  @ApiProperty({ description: '角色权限描述字符串', required: true })
  @IsNotEmpty({ message: '角色权限描述不能为空' })
  @prop()
  roleKey: string;

  @ApiProperty({ description: '角色ID' })
  @IsNotEmpty({ message: '角色ID不能为空' })
  @IsInt({ message: '角色ID应为正整数数字' })
  @prop()
  roleId: number;

  @ApiProperty({ description: '状态（1正常、0停用）' })
  @IsNotEmpty({ message: '状态不能为空' })
  @IsString({ message: '状态应为字符串类型' })
  @prop()
  status: string;

  @ApiProperty({ description: '状态（1正常、0停用）' })
  @IsOptional()
  @prop()
  statusDetail: string;

  @ApiProperty({ description: '角色顺序' })
  @IsOptional()
  @IsInt({ message: '角色顺序应为正整数' })
  @prop()
  order: number;

  @ApiProperty({ description: '备注' })
  @IsOptional()
  @prop()
  remarks: string;

  @IsOptional()
  @prop()
  createdAt: string;

  @IsOptional()
  @prop()
  updatedAt: string;

  @Allow()
  menus: number[];
}
